package java学习.第17章_反射机制;

/**反射
 * ●Reflection "(反射)是被视为动态语言的关键"，反射机制允许程序在执行期
 * 借助于Reflection API取得任何类的内部信息，并能直接操作任意对象的内
 * 部属性及方法。
 * ●加载完类之后，在堆内存的方法区中就产生了一个Class类型的对象(一个
 * 类只有一个Class对象)，这个对象就包含了完整的类的结构信息。我们可
 * 以通过这个对象看到类的结构。这个对象就像一面镜子，透过这个镜子看
 * 到类的结构，所以，我们形象的称之为:反射。
 * 正常方式:引入需要的“包类"名称-->通过new实例化-→取得实例化对象
 * 反射方式:实例化对象 -->getClass()方法 --→得到完整的“包类”名称
 */

/** 动态语言vs静态语言
 * 1、动态语言
 * 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以
 * 被引进，已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运
 * 行时代码可以根据某些条件改变自身结构。
 * 主要动态语言: Object-C、 C#、JavaScript、 PHP、Python、 Erlang。
 * 2、静态语言
 * 与动态语言相对应的，运行时结构不可变的语言就是静态语言。如Java、C、C++。
 *
 * Java不是动态语言，但Java可以称之为“准动态语言”。即Java有一定的动
 * 态性，我们可以利用反射机制、字节码操作获得类似动态语言的特性。
 * Java的动态性让编程的时候更加灵活!
 */
/**
 * ●Java反射机制提供的功能
 * ➢在运行时判断任意一个对象所属的类
 * ➢在运行时构造任意一个类的对象
 * ➢在运行时判断任意一个类所具有的成员变量和方法
 * ➢在运行时获取泛型信息
 * ➢在运行时调用任意一个对象的成员变量和方法
 * ➢在运行时处理注解
 * ➢生成动态代理
 *
 * 反射的优点：
 *      提高 java 程序的灵活性和可扩展性，降低了耦合性，提高了自适应能力
 *      允许程序创建控制任何累的对象，无需提前硬编码目标类
 * 反射的缺点：
 *      反射的性能低
 *          反射机制主要应用在对灵活性和扩展性要求很高的系统框架上
 *      反社会模糊程序内部逻辑，可读性差
 *
 */
public class A_反射基本了解 {//反射  大多数用在框架    框架 = 反射 + 注解 + 设计模式
    public static void main(String[] args) throws Exception{

        A_反射基本了解 m = new A_反射基本了解();
        //class java学习.第17章_反射机制.A_反射基本了解
        System.out.println(m.getClass());

    }

}
